package com.custom.items;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.json.JSONException;
import com.mycom.lib.gifimageview.GifDataDownloader;
import com.mycom.lib.gifimageview.GifImageView;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import com.oxi.idivertido.HomeActivity;
import com.oxi.idivertido.R;
import com.parse.GetDataCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseObject;
import com.parse.ProgressCallback;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.FrameLayout;
import android.widget.MediaController;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.VideoView;
public class ItemFeedMovie implements Item {
public final ParseObject feed;
private HomeActivity m_context;
public TextView tvCaption = null;
public VideoView viewVideo = null;
public ItemFeedMovie(Context context, ParseObject feed) {
this.m_context = (HomeActivity)context;
this.feed = feed;
}
@Override
public int getViewType() {
return RowType.IMAGE_MOVIE_ITEM;
}
@Override
public View getView(LayoutInflater inflater, View convertView) {
if (convertView == null) {
convertView = (View) inflater.inflate(R.layout.list_feed_movie, null);
}
tvCaption = (TextView) convertView.findViewById(R.id.txtCaption);
viewVideo = (VideoView) convertView.findViewById(R.id.vvVideo);
final ProgressBar progressBar = (ProgressBar) convertView.findViewById(R.id.progressPhoto);
try {
String caption = feed.getString("description");
tvCaption.setText(caption);
////////////////////////////////////////////////////
ParseFile videoFile = (ParseFile)feed.get("movie");
String key = feed.getObjectId();
String urlPath = videoFile.getUrl();
String extension = urlPath.substring((urlPath.lastIndexOf(".") + 1), urlPath.length());
final String url = key + "." + extension;
if (viewVideo.isPlaying()) {
return convertView;
}
viewVideo.setVisibility(View.INVISIBLE);
videoFile.getDataInBackground(new GetDataCallback() {
@Override
public void done(byte[] data, ParseException e) {
// TODO Auto-generated method stub
if (e == null) {
progressBar.setVisibility(View.GONE);
writeByteToFile(url, data);
String filePath = Environment.getExternalStorageDirectory() + "/FunnyFeed/" + url;
viewVideo.setVisibility(View.VISIBLE);
viewVideo.setVideoPath(filePath);
// viewVideo.setMediaController(new MediaController(m_context));
viewVideo.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
return false;
}
});
viewVideo.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
if (!viewVideo.isPlaying()) {
viewVideo.requestFocus();
viewVideo.start();
mp.setLooping(true);
}
}
});
} else {
// something went wrong
}
}
}, new ProgressCallback() {
@Override
public void done(Integer arg0) {
// TODO Auto-generated method stub
progressBar.setProgress(arg0);
}
});
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return convertView;
}
private boolean isExistFile(String filename) {
String filePath = Environment.getExternalStorageDirectory() + "/FunnyFeed/" + filename;
File file = new File(filePath);
return file.exists();
}
private void writeByteToFile(String filename, byte[] data) {
String ext_storage_state = Environment.getExternalStorageState();
String folderPath = Environment.getExternalStorageDirectory() + "/FunnyFeed";
File mediaStorage = new File(folderPath);
if (ext_storage_state.equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
if (!mediaStorage.exists()) {
mediaStorage.mkdirs();
}
File fileStorage = new File(folderPath + "/" + filename);
//write file writing code..
try {
FileOutputStream fos=new FileOutputStream(fileStorage);
try {
fos.write(data);
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else
{
//Toast message sd card not found..
}
}
private byte[] readByteFromFile(String filename) {
String filePath = Environment.getExternalStorageDirectory() + "/FunnyFeed/" + filename;
FileInputStream inputStream;
try {
inputStream = new FileInputStream(filePath);
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte [] buffer = new byte[ 1024 ];
int n = 0;
while (-1 != (n = inputStream.read(buffer))) {
output.write(buffer, 0, n);
}
inputStream.close();
return output.toByteArray();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}